[DllImport("advapi32.dll", SetLastError=true)]
static extern TODO CreateService(TODO);
<DllImport("advapi32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _
Private Shared Function CreateService(ByVal hSCManager As IntPtr, ByVal serviceName As String, _
ByVal displayName As String, ByVal desiredAccess As Int32, ByVal serviceType As Int32, _
ByVal startType As Int32, ByVal errorcontrol As Int32, ByVal binaryPathName As String, _
ByVal loadOrderGroup As String, ByVal TagBY As Int32, ByVal dependencides As String, _
ByVal serviceStartName As String, ByVal password As String) As IntPtr
None.
The 4th parameter from the end, TagBY, should - accordig to the API documention, be a by-ref parameter. Unfortunatly, the call only works if the parameter is byva.
Please add some!
Dim scHandle As IntPtr = OpenSCManager(Nothing, Nothing, SC_MANAGER_ALL_ACCESS)
Dim serviceName As String = "AAATestService"
Dim displayName As String = "AAATestDisplayName"
If OpenFileDialog1.ShowDialog() <> DialogResult.OK Then
MsgBox("aborting")
End If
Dim pathName As String = Chr(34) & OpenFileDialog1.FileName & Chr(34)
Dim serviceHandle As IntPtr = CreateService(scHandle, serviceName, displayName, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, _
SERVICE_AUTO_START, SERVICE_ERROR_NORMAL, pathName, Nothing, 0, Nothing, Nothing, Nothing)
If serviceHandle.Equals(IntPtr.Zero) Then
MsgBox(Marshal.GetLastWin32Error())
End If
CloseServiceHandle(serviceHandle)
CloseHandle(scHandle)
System.ServiceProcess.ServiceInstaller - http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemServiceProcessServiceInstallerClassTopic.asp